1. Field of the Invention
The present invention relates generally to a computer implemented method, data processing system, and computer program product for placing threads on processors. More specifically, the present invention relates to the placing of threads in a shared processor partitioning environment.
2. Description of the Related Art
Computer designers increasingly rely on multiple processor architectures to take advantage of higher levels of hardware integration and miniaturization available with modern technology. One popular type of architecture is the symmetric multiprocessor (SMP) architecture, for example, as implemented in the Power5™ computer system. Power5 is a trademark of International Business Machines of Armonk, N.Y.
A common feature of symmetric multiprocessors is the ability to assign computer resources from a pool to one or more logical partitions. Computer resources include, for example, memory, disk storage, and physical processors. An architecture that shares physical processors among logical partitions is known as Micro-partitioning™. Micro-partitioning is a trademark of International Business Machines Corporation in the United States, other countries or both. In such an arrangement, a hypervisor may assign a time slice of a physical processor to a logical partition and later assign a second time slice of the physical processor to a second logical partition. Such a time-shared arrangement is known as a virtual processor. A virtual processor is a time-apportioned part of a physical processor. Typically, a virtual processor is apportioned in units measured in timeslices. The timeslices can be grouped in sets called a dispatch wheel.
Before virtualization and the availability of a hypervisor, the operating system time-sliced software threads on physical processors operated in an architecture known as time-sharing. With the availability of a hypervisor, there are two more or less independent schedulers of physical processors. The first scheduler, or hypervisor, dispatches virtual processors to physical processors. The second scheduler, or operating system, manages software threads at execution time.
In a micro-partitioned environment, however, software executes by using processors or virtual processors to execute instructions of a process or of a software thread. A typical operating system instance or partition may have many software threads that operate concurrently on several physical processors. Moreover, partitions may be assigned finer-grained allocations of processor time using micro-partitioning, resulting in apportioning levels of time sharing for the physical processor. This result is a consequence of blending the operating system scheduling and hypervisor partition scheduling. This fine granularity is possible because virtual processors correspond with various entitlements of a physical processor. The entitlement is a proportion of a dispatch wheel that the physical processor operates for the thread. In such an arrangement, each thread runs during the timeslice to which each thread is assigned. Such an arrangement can increase the overall usage of each physical processor.
A software thread may alternate between running and sleeping states within an operating system dispatched to a virtual processor. For example, the software thread runs when all necessary resources are available to that software thread. A resource is available when the resource is not subject to a mutually exclusive lock held by another software thread executing in the same partition. Conversely, a software thread sleeps when another software thread executing in the same partition locks a resource required by the code of that software thread. A sleeping software thread is a software thread that is unable to progress due to a data processing resource being occupied by a lock acquired by a second running software thread. Nevertheless, when the software thread is waiting on some event, for example, a lock release, and the event occurs, the operating system makes the software thread runnable and assigns the software thread a logical processor. A logical processor is an extension to a virtual processor that abstracts hardware threads. It handles execution of the software thread's instructions.
Software can achieve improved performance if multiple software threads operate concurrently. However, care must be taken that a resource that is in use by one thread is reserved or otherwise protected from access and/or revision by a second thread during such limited periods of use by the first thread. One way to exclude a second software thread from access is for the first thread to establish a lock associated with the resource. A lock is a bit set that corresponds to a data processing resource, such as, for example, a tract of memory. The lock may include an index number or other identifier to track details of the lock.
One goal that designers of SMPs attempt to accomplish is minimizing a time that a thread waits on a lock to become available. Thus, software threads that contend on a lock in order to reduce time spent in a sleeping state need to be efficiently scheduled.